package com.fangsiqi.mashibing;

import org.openjdk.jol.info.ClassLayout;

// 尝试LockSync的锁状态测试
public class LockSyncDemo {
    public static void main(String[] args) throws InterruptedException {
        // 先休眠5s，然后构建Object对象，之后再打印对象的MarkWord
        Thread.sleep(1000);
       // 在Java中，任何对象都可以作为锁，new一个Object，把他当成锁对象
        Object obj=new Object();
        System.out.println(ClassLayout.parseInstance(obj).toPrintable());
        // obj.hashCode();
       // 打印obj的MarkWord信息
       //  System.out.println(ClassLayout.parseInstance(obj).toPrintable());
        // 让main线程休眠5s，然后再次打印当前obj的MarkWord信息
        System.out.println(ClassLayout.parseInstance(obj).toPrintable());

        synchronized (obj){
            // obj锁被main线程持有了
            // 此时是轻量级锁状态，因为偏向锁延迟处于开启状态，并且指向了当前main线程
            System.out.println(ClassLayout.parseInstance(obj).toPrintable());
            // 通过在锁内部调用hashCode方法，可以直接升级为重量级锁
            obj.hashCode();

            System.out.println(ClassLayout.parseInstance(obj).toPrintable());
        }


    }
}
